package com.dkm.orproject.dkmoa.dao;

import com.dkm.orproject.dkmoa.domain.OaDepartment;
import com.dkm.orproject.dkmoa.domain.vo.OaDepartmentVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface OaDepartmentMapper {
    /**
     * 删除
     * @param pkDepartmentId 部门Id
     * @return 删除成功
     */
    int deleteByPrimaryKey(Long pkDepartmentId);

    /**
     * 部门增加
     * @param record 部门信息
     * @return 是否增加成功
     */
    int insertSelective(OaDepartment record);

    /**
     * 根据id查询信息
     * @param pkDepartmentId 部门id
     * @return 部门的信息
     */
    OaDepartment selectByPrimaryKey(Long pkDepartmentId);

    /**
     * 根据id查询信息(查看)
     * @param pkDepartmentId 部门id
     * @return 部门的信息
     */
    OaDepartmentVo selectById(Long pkDepartmentId);

    /**
     * 更新部门的信息
     * @param record 部门的信息
     * @return 是否更新成功+
     */
    int updateByPrimaryKeySelective(OaDepartment record);

    /**
     * 查询部门（为下拉框）
     * @return 部门的集合
     */
    List<OaDepartment> findByAll();

    /**
     * 逻辑删除
     * @param pkDepartmentId 部门Id
     * @param personnelName  操作人
     * @param  date 删除时间
     * @return 是否更新成功
     */
    int updateById(Long pkDepartmentId,String personnelName,Date date);

    /**
     * 批量物理删除
     * @param list 部门的集合
     * @return 删除的行数
     */
    int deleteAll(List<Long> list);

    /**
     * 批量逻辑删除
     * @param list 部门的集合
     * @param  date 操作时间
     * @return 删除的行数
     */
    int updateAll(List<Long> list, String personnelName, Date date);

    /**
     * 查询所有人员的信息
     * @param department 部门 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 部门信息的集合
     */
    List<OaDepartment> findAll(@Param(value = "department")OaDepartment department, @Param(value = "startTime") String startTime, @Param(value = "endTime") String endTime);

    /**
     * 总行数
     * @param department 部门模型 用于条件查询
     * @param startTime 开始时间
     * @param endTime 结束
     * @return 总行数
     */
    Long rowCount(@Param(value = "department") OaDepartment department,@Param(value = "startTime") String startTime,@Param(value = "endTime") String endTime);

    /**
     * 更新部门的信息
     * @param record 更新以后的信息
     * @return 成功的行数
     */
    int updateByPrimaryKey(OaDepartment record);

    /***
     * 查询关键字是否多余
     * @param keyword 关键字的
     * @return 数量
     */
    int findByKeyword(String keyword);

    /**
     *  根据关键字
     * @param wordKey 关键字
     * @return 数量
     */
    List<OaDepartment> findByEntryCheckDepartment(@Param("wordKey") String wordKey);

    /**
     * 统计人数(为编号做准备)
     * @return 人数
     */
    int count();

    /**
     * 查询所有的公司
     *
     * @return 集合
     */
    List<OaDepartment> selectAll();

    /**
     * 为资产出库查询部门
     *
     * @param personnelId 用户Id
     * @return 查询结果
     */
    OaDepartment selectByPersonnelId(Long personnelId);
}